// 通知管理工具类
class NotificationManager {
    constructor() {
        this.isInitialized = false;
    }
    
    // 初始化通知
    init() {
        // #ifdef APP-PLUS
        // 监听点击通知事件
        plus.push.addEventListener("click", (msg) => {
            // 可以根据通知内容跳转到对应页面
            this.handleNotificationClick(msg);
        });
        
        // 监听接收到通知事件
        plus.push.addEventListener("receive", (msg) => {
            // 接收到推送消息
        });
        
        this.isInitialized = true;
        // #endif
    }
    
    // 处理通知点击事件
    handleNotificationClick(msg) {
        try {
            const payload = JSON.parse(msg.payload || '{}');
            
            // 根据通知类型跳转到不同页面
            switch (payload.type) {
                case 'memo_reminder':
                    // 跳转到备忘录列表
                    uni.switchTab({
                        url: '/pages/index/list'
                    });
                    break;
                case 'daily_summary':
                    // 跳转到首页
                    uni.switchTab({
                        url: '/pages/index/index'
                    });
                    break;
                default:
                    // 默认跳转到首页
                    uni.switchTab({
                        url: '/pages/index/index'
                    });
            }
        } catch (error) {
            // 处理通知点击失败，静默处理
        }
    }
    
    // 检查通知权限
    checkPermission() {
        return new Promise((resolve, reject) => {
            // #ifdef APP-PLUS
            try {
                const main = plus.android.runtimeMainActivity();
                const NotificationManagerCompat = plus.android.importClass("androidx.core.app.NotificationManagerCompat");
                
                if (NotificationManagerCompat) {
                    const areNotificationsEnabled = NotificationManagerCompat.from(main).areNotificationsEnabled();
                    resolve(areNotificationsEnabled);
                } else {
                    // 兼容旧版本
                    resolve(true);
                }
            } catch (error) {
                resolve(false);
            }
            // #endif
            
            // #ifdef H5
            if ('Notification' in window) {
                resolve(Notification.permission === 'granted');
            } else {
                resolve(false);
            }
            // #endif
            
            // #ifdef MP
            // 小程序环境暂时返回true
            resolve(true);
            // #endif
        });
    }
    
    // 请求通知权限
    requestPermission() {
        return new Promise((resolve, reject) => {
            // #ifdef APP-PLUS
            this.checkPermission().then(hasPermission => {
                if (hasPermission) {
                    resolve(true);
                } else {
                    // 引导用户去设置
                    uni.showModal({
                        title: '需要通知权限',
                        content: '为了及时提醒您重要的备忘录，需要开启通知权限。请在系统设置中允许通知。',
                        confirmText: '去设置',
                        cancelText: '取消',
                        success: (res) => {
                            if (res.confirm) {
                                this.openAppSettings();
                                // 假设用户会去设置
                                resolve(false);
                            } else {
                                resolve(false);
                            }
                        }
                    });
                }
            });
            // #endif
            
            // #ifdef H5
            if ('Notification' in window) {
                if (Notification.permission === 'granted') {
                    resolve(true);
                } else if (Notification.permission !== 'denied') {
                    Notification.requestPermission().then(permission => {
                        resolve(permission === 'granted');
                    });
                } else {
                    resolve(false);
                }
            } else {
                resolve(false);
            }
            // #endif
            
            // #ifdef MP
            // 小程序使用订阅消息
            uni.requestSubscribeMessage({
                tmplIds: ['备忘录提醒模板ID'], // 需要在小程序后台配置模板
                success: (res) => {
                    resolve(true);
                },
                fail: (err) => {
                    resolve(false);
                }
            });
            // #endif
        });
    }
    
    // 打开应用设置页面
    openAppSettings() {
        // #ifdef APP-PLUS
        try {
            const Intent = plus.android.importClass("android.content.Intent");
            const Settings = plus.android.importClass("android.provider.Settings");
            const Uri = plus.android.importClass("android.net.Uri");
            const main = plus.android.runtimeMainActivity();
            
            const intent = new Intent();
            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            const uri = Uri.fromParts("package", main.getPackageName(), null);
            intent.setData(uri);
            main.startActivity(intent);
        } catch (error) {
            // 打开设置失败，静默处理
        }
        // #endif
    }
    
    // 发送本地通知
    sendLocalNotification(options = {}) {
        const defaultOptions = {
            title: '备忘录提醒',
            content: '您有新的备忘录提醒',
            when: new Date(Date.now() + 60000), // 默认1分钟后
            sound: true,
            vibrate: true
        };
        
        const finalOptions = { ...defaultOptions, ...options };
        
        // #ifdef APP-PLUS
        try {
            // 创建本地通知
            const message = {
                title: finalOptions.title,
                content: finalOptions.content,
                payload: JSON.stringify(finalOptions.payload || {}),
                when: finalOptions.when,
                sound: finalOptions.sound ? 'system' : 'none',
                vibrate: finalOptions.vibrate,
                cover: false
            };
            
            plus.push.createMessage(JSON.stringify(message), JSON.stringify(message), {
                success: () => {
                    // 本地通知创建成功
                },
                fail: (err) => {
                    // 本地通知创建失败
                }
            });
        } catch (error) {
            // 发送本地通知失败，静默处理
        }
        // #endif
        
        // #ifdef H5
        if ('Notification' in window && Notification.permission === 'granted') {
            new Notification(finalOptions.title, {
                body: finalOptions.content,
                icon: '/static/logo.png'
            });
        }
        // #endif
    }
    
    // 安排每日提醒
    scheduleDailyReminder(hour = 20, minute = 0) {
        const now = new Date();
        const reminderTime = new Date();
        reminderTime.setHours(hour, minute, 0, 0);
        
        // 如果设定时间已过，推到明天
        if (reminderTime <= now) {
            reminderTime.setDate(reminderTime.getDate() + 1);
        }
        
        this.sendLocalNotification({
            title: '备忘录提醒',
            content: '记得查看今天的备忘录哦！📝',
            when: reminderTime,
            payload: {
                type: 'daily_summary'
            }
        });
        
        // 每日提醒已设置
    }
    
    // 清除所有通知
    clearAllNotifications() {
        // #ifdef APP-PLUS
        try {
            plus.push.clear();
            // 已清除所有通知
        } catch (error) {
            // 清除通知失败，静默处理
        }
        // #endif
    }
    
    // 为特定备忘录设置提醒
    scheduleReminderForMemo(memo, reminderTime) {
        if (!reminderTime || new Date(reminderTime) <= new Date()) {
            return false;
        }
        
        this.sendLocalNotification({
            title: '备忘录提醒',
            content: memo.title || '您有一个重要的备忘录',
            when: new Date(reminderTime),
            payload: {
                type: 'memo_reminder',
                memoId: memo.id
            }
        });
        
        return true;
    }
}

// 创建单例
const notificationManager = new NotificationManager();

// 自动初始化
// #ifdef APP-PLUS
if (typeof plus !== 'undefined') {
    notificationManager.init();
} else {
    document.addEventListener('plusready', () => {
        notificationManager.init();
    });
}
// #endif

module.exports = notificationManager; 